<?php
namespace app\wechat\controller;

use app\wechat\controller\Dict;
use think\Log;
/**
 * 寺库信用卡文件
 */
class Secoo extends Common{

    private $deviceType; // 定义终端类型
    private $publicParams; // 定义公共参数
    private $deviceTypeArr = array(
                    'PC' => '10',
                    'iPhone' => '21',
                    'Android' => '22',
                    '' => '90',
                );

    public function __construct(){
        parent::__construct();
    }

    /**
     * 公共参数方法
     */
    private function publicParams($opType='',$data=array())
    {
        // 查询商户渠道报备号
        $partnerChannel = $this->getWS('credit', 'partners@partnerChannel', ['partner_id'=>session('partner_id')]);
        if($partnerChannel['status'] != '2000' || empty($partnerChannel['result']['partner_secoo_no'])){
            return $this->parse_data(['code'=>'5000','msg'=>'查询错误']);
        }

        $this->publicParams = array(
                'uid' => $this->uid, // 用户ID
                'opType' => $opType, // 服务接口编号
                'midTransaction' => $partnerChannel['result']['partner_secoo_no'], //交易商户号
                'deviceType' => $this->deviceTypeArr[userAgent()], // 设备类型
                'data' => isset($data)?$data:[], // 服务请求数据
            );
    }

    /**
     * 支持的信用卡列表
     */
    public function bankList($params=array())
    {
        // 测试参数
        // $params = array(
        //         'term' => '3', // 期数
        //     );
        
        // 参数校验
        if(empty($params['term'])){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }

        // 请求支持的信用卡列表
        $data = array(
                'installmentCount' => $params['term'], // 账期数
                'bankCode' => '', // 银行编码
            );
        $this->publicParams('4008',$data);
        $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
        if($result['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'获取信息失败']);
        }
        
        return $this->parse_data(['data'=>$result['result']]);
    }

    /**
     * Desc: 获取信用卡首付款状态
     * User: liuning
     * Date: 2018/12/14 9:57
     * Return: array
     * Update:如果实时计算的首付款金额与订单金额不相等，需要去取消订单，
     */
    public function firstPayStatus($params=array())
    {
        //判断用户是否登录
        if (!session('uid')) {
            return $this->parse_data(['code'=>'5003','msg'=>'请先登录','data'=>['jumpUrl'=>'pay/paylogin']]);
        }

        if(!isset($params['p_id']) || empty($params['p_id'])){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }

        $product_id = $params['p_id'];//课程id

        // 获取机构下课程
        $partnerProduct = $this->getWS('credit', 'Aggregate@getPartnerProduct', ['p_id'=>$product_id]);
        if($partnerProduct['status'] != '2000'){
            return ['result_code'=>'5000', 'result_msg'=>'查询机构课程失败，请刷新重试'];
        }

        //公式：需支付的首付款全额 = 每期固定金额服务费 * 期数 + 课程配置的首付款金额。   注：当机构支付每期服务费时，不计算每期固定金额服务费*期数
        //实时计算课程配置的首付款金额   注：p_is_first_pay 是否预交首付款（1是 2否）
        if($partnerProduct['result'][0]['p_is_first_pay'] == 1){
            $p_first_payment = floatval($partnerProduct['result'][0]['p_first_payment']);
        }else{
            $p_first_payment = floatval('0');
        }

        //实时计算服务费
        if($partnerProduct['result'][0]['p_partner_service'] != 1){ // 用户出服务费
            $p_service_price = floatval($partnerProduct['result'][0]['p_service_price']*$partnerProduct['result'][0]['p_period']);
        }else{
            $p_service_price = floatval('0');
        }

        // 实时计算用户支付的信用卡首付款全额
        $amount = floatval($p_first_payment) + floatval($p_service_price);

        // 获取当前课程下的成功首付款订单(1聚合支付，2机构充值，3首付款)
        $firstPaySuccess = $this->getWS('credit', 'Aggregate@getOrderList', ['u_code'=>session('uid'),'status'=>2000,'order_type'=>3,'product_id'=>$product_id,'partner_id'=>session('partner_id')]);
        if($firstPaySuccess['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'首付款查询失败，请刷新重试']);
        }

        //查询是否有成功的首付款订单
        if(!empty($firstPaySuccess['result'])){
            $result = [
                'status' => $firstPaySuccess['result'][0]['status'],// status 获取支付成功详情页  状态 1000初始，2000成功，3000等待，4000失败,5000取消订单,6000疑账',
                'order_num' => $firstPaySuccess['result'][0]['order_num'],//订单号
                'amount' => floatval($firstPaySuccess['result'][0]['amount']),//首付款订单金额
                'p_first_payment' => $p_first_payment,//实时计算课程配置的首付款金额
                'p_service_price' => $p_service_price,//实时计算服务费
                'amount_real' => floatval($firstPaySuccess['result'][0]['amount']),//已支付首付款金额
                'p_period' => $partnerProduct['result'][0]['p_period'],//期数
            ];
        }else{
            //获取当前课程下的首付款订单
            $firstPayInfo = $this->getWS('credit', 'Aggregate@getOrderList', ['u_code'=>session('uid'),'status'=>'1000','order_type'=>3,'product_id'=>$product_id,'partner_id'=>session('partner_id')]);

            if($firstPaySuccess['status'] != '2000'){
                return $this->parse_data(['code'=>'5000','msg'=>'首付款查询失败，请刷新重试']);
            }

            if(!empty($firstPayInfo['result'])){
                //如果实时计算的首付款金额与订单金额不相等，则取消订单
                if($amount == floatval($firstPayInfo['result'][0]['amount'])){
                    $result = [
                        'status' => $firstPayInfo['result'][0]['status'],// status 获取支付成功详情页  状态 1000初始，2000成功，3000等待，4000失败,5000取消订单,6000疑账',
                        'order_num' => $firstPayInfo['result'][0]['order_num'],//订单号
                        'amount' => floatval($firstPayInfo['result'][0]['amount']),//首付款订单金额
                        'p_first_payment' => $p_first_payment,//实时计算课程配置的首付款金额
                        'p_service_price' => $p_service_price,//实时计算服务费
                        'amount_real' => $amount,//实时计算首付款金额
                        'p_period' => $partnerProduct['result'][0]['p_period'],//期数
                        'is_equals' => 1,//实时计算的首付款金额是否与订单金额相等（1相等 2不相等）
                    ];
                }else{
                    //取消订单
                    $data = array(
                        'order_num'         => $firstPayInfo['result'][0]['order_num'],
                        'status'            => '5000',
                    );
                    $updateOrder = $this->getWS('credit', 'Aggregate@updateOrderStatus', $data);

                    if($updateOrder['status'] != "2000"){
                        return $this->parse_data(['code' => 5000, 'msg' => '系统首付款金额不一致，请刷新后重试！']);
                    }

                    $result = [
                        'status' => '',// status 获取支付成功详情页  状态 1000初始，2000成功，3000等待，4000失败,5000取消订单,6000疑账',
                        'order_num' => '',//订单号
                        'amount' => '',//首付款订单金额
                        'p_first_payment' => $p_first_payment,//实时计算课程配置的首付款金额
                        'p_service_price' => $p_service_price,//实时计算服务费
                        'amount_real' => $amount,//实时计算首付款金额
                        'p_period' => $partnerProduct['result'][0]['p_period'],//期数
                        'is_equals' => 2,//实时计算的首付款金额是否与订单金额相等（1相等 2不相等）
                    ];

                    Log::write($updateOrder, '接口返回', true, 'xyksf/');
                }
            }else{
                $result = [
                    'status' => '',// status 获取支付成功详情页  状态 1000初始，2000成功，3000等待，4000失败,5000取消订单,6000疑账',
                    'order_num' => '',//订单号
                    'amount' => '',//首付款订单金额
                    'p_first_payment' => $p_first_payment,//实时计算课程配置的首付款金额
                    'p_service_price' => $p_service_price,//实时计算服务费
                    'amount_real' => $amount,//实时计算首付款金额
                    'p_period' => $partnerProduct['result'][0]['p_period'],//期数
                    'is_equals' => '',//实时计算的首付款金额是否与订单金额相等（1相等 2不相等）
                ];
            }
        }
        Log::write($result, '查询首付款数据', true, 'xyksf/');
        return $this->parse_data(['code'=>'2000','msg'=>'首付款查询成功','data'=>$result]);
    }

    /**
     * Desc: 生成首付款订单
     * User: liuning
     * Date: 2018/12/14 10:42
     * Return: array
     * Update:
     */
    public function firstPayOrder($params=array())
    {
        // 判断用户是否登录
        if(!session('uid')){
            return $this->parse_data(['code'=>'5003','msg'=>'请先登录','data'=>['jumpUrl'=>'pay/paylogin']]);
        }

        if(!isset($params['p_id']) || empty($params['p_id'])){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }

        // 获取机构下课程
        $partnerProduct = $this->getWS('credit', 'Aggregate@getPartnerProduct', ['p_id'=>$params['p_id']]);
        if($partnerProduct['status'] != '2000'){
            return ['result_code'=>'5000', 'result_msg'=>'查询机构课程失败'];
        }

        //公式：需支付的首付款全额 = 每期固定金额服务费 * 期数 + 课程配置的首付款金额。   注：当机构支付每期服务费时，不计算每期固定金额服务费*期数
        //实时计算课程配置的首付款金额   注：p_is_first_pay 是否预交首付款（1是 2否）
        if($partnerProduct['result'][0]['p_is_first_pay'] == 1) {
            $p_first_payment = floatval($partnerProduct['result'][0]['p_first_payment']);
        }else{
            $p_first_payment = floatval('0');
        }

        //实时计算服务费    注：p_partner_service 商户或用户支付每期服务费（0用户 1商户）
        if($partnerProduct['result'][0]['p_partner_service'] != 1){
            $p_service_price = floatval($partnerProduct['result'][0]['p_service_price']*$partnerProduct['result'][0]['p_period']);
        }else{
            $p_service_price = floatval('0');
        }

        //实时计算用户支付的信用卡首付款全额
        $amount = floatval($p_first_payment) + floatval($p_service_price);

        //获取用户信息open_id
        $open_id = session('openid');
        if(!session('openid')){
            $userResult = $this->getWS('ucenter', 'users@checkUser', ['userName' => session('username')]);
            $open_id = $userResult['result']['open_id'];
        }

        $product_id = $params['product_id'];//课程id
        $status = $params['status'];//支付状态

        //生成首付款订单号
        $first_pay_order_num = 'SF'.date('YmdHis').mt_rand(1000,9999);
        $order_num = !empty($params['order_num'])?$params['order_num']:$first_pay_order_num;//首付款订单号

        /**
         * order_type 订单类型：1、聚合支付，2机构充值，3首付款
         * status 获取支付状态    状态 1000初始，2000成功，3000等待，4000失败，5000取消订单,6000疑账',
         */
        //查询订单
        $order_condition = [
            'order_num'=>$order_num,
            'u_code'=>session('uid'),
            'order_type'=>3,
            'status'=>$status,
            'product_id'=>$product_id,
            'partner_id'=>$partnerProduct['result'][0]['partner_id']
        ];
        $firstPayInfo = $this->getWS('credit', 'Aggregate@getOrderList',$order_condition );
        if($firstPayInfo['status'] != 2000){
            return $this->parse_data(['code'=>'5000','msg'=>'首付款查询失败，请刷新重试']);
        }

        if(empty($firstPayInfo['result']) || in_array($firstPayInfo['result'][0]['status'],['4000','5000'])){//新增首付款订单
            // 首付款支付
            $transactionPay = array(
                'order_type'        => '3',//类型：1、聚合支付。 2机构充值。3首付款
                'channel'           => '4',//第三方通道：1学通宝，2招商 3工商,4易宝
//                'appid'             => $partnerProduct['result'][0]['partner_yee_no'],//商户报备号
                'appid'             => '10026053357',//商户报备号
                'u_code'            => session('uid'),//客户编号
                'partner_id'        => $partnerProduct['result'][0]['partner_id'],//商户id
                'partner_name'      => $partnerProduct['result'][0]['partner_name'],//商户名称
                'order_num'         => $first_pay_order_num,//首付款订单号
                'services'          => '',//服务类型
                'amount'            => $amount,//首付款金额
                'product_id'        => $partnerProduct['result'][0]['p_id'],//课程id
                'product_name'      => $partnerProduct['result'][0]['p_name'],//产品名称
                'name'              => '',//姓名
                'phone'             => session('username'),//手机号
                'note'              => '',//备注
                'status'            => '1000',//状态：1000初始，2000成功，3000等待，4000失败
                'add_time'          => date('Y-m-d H:i:s'),//下单时间
                'clientip'          => getenv("REMOTE_ADDR"),//请求IP地址
                'open_id'           => session('openid'),//微信用户唯一标识
                'sales_name_id'     => $open_id,
            );
            $partnersOrder = $this->getWS('credit', 'PartnersOrder@partnerInsert', $transactionPay);
            if ($partnersOrder['status'] != '2000') {
                return $this->parse_data(['code' => 5000, 'msg' => '首付款下单失败,请联系管理员']);
            }
            Log::write($partnersOrder, '首付款下单接口返回', true, 'xyksf/');
            Log::write($transactionPay, '首付款下单传输数据', true, 'xyksf/');
            //跳转选择支付页面
            $return_result = ['code'=>'2000', 'msg'=>'首付款下单成功', 'data'=>['order_num'=>$first_pay_order_num,'jumpUrl'=>'/pay/?type=5&order_num='.$order_num,'return_url'=>'']];
            return $this->parse_data($return_result);

        }else if($firstPayInfo['result'][0]['status'] == 1000 ){//重新支付首付款订单
            $return_result = ['code'=>'2000', 'msg'=>'首付款订单重新支付', 'data'=>['order_num'=>$order_num,'jumpUrl'=>'/pay/?type=5&order_num='.$order_num,'return_url'=>'']];
            return $this->parse_data($return_result);
        }else if($firstPayInfo['result'][0]['status'] == 2000){//已成功支付首付款订单
            $return_result = ['code'=>'2001', 'msg'=>'首付款订单支付成功','data'=>['jumpUrl'=>'','return_url'=>'/secoo/product_bill?p_id='.$product_id]];
            return $this->parse_data($return_result);
        }
    }

    /**
     * 信用卡绑定
     */
    public function bindCreditCards($params=array())
    {
        // 测试参数
        // $params = array(
        //         'cardName' => '中国银行', // 银行名称
        //         'bankTel' => '18613227149', // 银行预留手机号 *
        //         'bankCode' => 'ICBC', // 银行编码 * 
        //         'bankNo' => '6013135881502261', // 银行信用卡号 * 
        //         'bankExpireDate' => '2018/12', // 有效期 * 
        //         'bankCvn2' => '578', // 银行卡cv2 * 
        //     );
        
        // 参数校验
        if(!checkParam($params)){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }

        // 查询用户信息
        $userInfo = $this->getWS('ucenter', 'users@userInfo', ['u_code'=>$this->uid]);
        if($userInfo['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'系统内部错误']);
        }
        $data = array(
                'userName' => $userInfo['result']['u_true_name'], // 用户姓名 *
                'idCardNo' => $userInfo['result']['u_ident_no'], // 用户身份证号 *
                'bankTel' => $params['bankTel'], // 银行预留手机号 *
                'bankCode' => $params['bankCode'], // 银行编码 * 
                'bankNo' => $params['bankNo'], // 银行信用卡号 * 
                'bankExpireDate' => $params['bankExpireDate'], // 有效期 * 
                'bankCvn2' => $params['bankCvn2'], // 银行卡cv2 *
            );
        // 参数赋值
        $this->publicParams('1001',$data);
        $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
        if($result['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>$result['msg']]);
        }

        // 成功后绑定信用卡
        $addBankInfo = array(
                'u_code' => $this->uid, // 学员编号
                'ub_bank_name' => $params['cardName'], // 银行名称
                'ub_card_no' => $params['bankNo'], // 银行卡号
                'ub_phone' => $params['bankTel'], // 银行卡绑定手机号
                'ub_bank_code' => $params['bankCode'], // 银行编码 
                'ub_bank_expire_date' => $params['bankExpireDate'], // 有效期
                'ub_bank_cvn2' => $params['bankCvn2'], // 银行卡cv2
                'ub_status' => 2, // 是否可用（1启用，2解绑）
                'ub_apply_id' => $result['result']['applyId'] // 寺库绑卡ID
            );
        $addBank = $this->getWS('ucenter', 'bank@addBank', $addBankInfo);
        // if($addBank['status'] != '2000'){
        //     return $this->parse_data(['code'=>'5000','msg'=>'信用卡添加失败']);
        // }
        $result['result']['ub_id'] = $addBank['result']['ub_id'];
        
        return $this->parse_data(['data'=>$result['result']]);
    }

    /**
     * 信用卡绑定验证
     */
    public function bindCreditCardsVerification($params=array())
    {
        // 测试参数
        // $params = array(
        //         'user_bank_id' => '300', // 银行卡号ID
        //         'applyId' => '2000008659', // 发送激活短信返回值 *
        //         'phone_code' => '123456', // 短信验证码 *
        //     );

        // 参数校验
        if(empty($params['applyId']) || empty($params['phone_code']) || empty($params['user_bank_id'])){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }

        // 请求绑定信用卡验证接口
        $data = array(
                'applyId' => $params['applyId'], // 发送激活短信返回值 *
                'smsVerifyCode' => $params['phone_code'], // 短信验证码 *
            );
        $this->publicParams('1002',$data);
        $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
        if($result['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'信用卡绑定验证失败']);
        }

        // 修改信用卡绑定成功
        $updateXyBank = $this->getWS('ucenter', 'bank@updateXyBank', ['ub_id'=>$params['user_bank_id'],'ub_status'=>1]);
        // if($updateXyBank['status'] != '2000'){
        //     return $this->parse_data(['code'=>'5000','msg'=>'信用卡修改失败']);
        // }
        
        return $this->parse_data(['data'=>$result['result']]);
    }

    /**
     * 信用卡支付消费接口
     */
    public function consumerTransaction($params=array())
    {
        // 测试参数
        // $params = array(
        //         'b_id' => '1235', // 订单ID *
        //         'user_bank_id' => '4150', // 银行卡号ID
        //         'p_name' => '', // 课程名称
        //     );

        // 校验参数
        $params['order_id'] = !empty($params['b_id']) ? $params['b_id'] : session('b_id');
        if(empty($params['order_id']) || empty($params['user_bank_id'])){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }
        
        // 获取订单数据
        $getApplyInfo = $this->getWS('credit', 'Apply@getApplyInfo', ['b_id'=>$params['order_id']]);
        if($getApplyInfo['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'系统内部错误']);
        }
        // 查询信用卡信息
        $selectBank = $this->getWS('ucenter','bank@selectBank',['u_code'=>$this->uid,'user_bank_id'=>$params['user_bank_id'],'ub_status'=>1]);
        if($selectBank['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'系统内部错误']);
        }

        // 机构报备费率计算
        $userRate = array(
                'amount' => $getApplyInfo['result']['b_borrow_amount'], // 金额
                'term'=>$getApplyInfo['result']['b_period'], // 期数
            );
        $chargeAmount = $this->userRate($userRate);

        // 信用卡支付消费接口
        $orderNo = 'MYP'.$getApplyInfo['result']['p_id'].$getApplyInfo['result']['u_code'].'B'.$getApplyInfo['result']['b_id'];
        $data = array(
                'bankNo' => $selectBank['result'][0]['ub_card_no'], // 银行卡号 *
                'orderId' => $orderNo, // 订单ID *
                'orderAmount' => $getApplyInfo['result']['b_borrow_amount'], // 订单金额 *
                'payAmount' => $getApplyInfo['result']['b_borrow_amount'], // 实际支付金额 *
                'chargeAmount' => $chargeAmount, // 用户服务费
                'stageNum' => $getApplyInfo['result']['b_period'], // 账期数（1/3/6/12/24） *
                'productInfo' => !empty($params['p_name']) ? $params['p_name'] : '教育课程账单', // 商品信息 *
            );
        $this->publicParams('2001', $data);
        $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
        if($result['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>$result['msg']]);
        }

        // 更新订单状态 2201待支付
        $updateApply = $this->getWS('credit', 'Apply@updateApply', ['b_id'=>$params['order_id'], 'data' =>['b_pay_id'=>$result['result']['payId'],'b_status'=>'2201','fund_loan_no'=>$orderNo]]);
        // if($updateApply['status'] != '2000'){
        //     return $this->parse_data(['code' => 5000, 'msg' => '更新订单失败']);
        // }
        // 记录支付流水
        $transaction = array(
                'amount' => $getApplyInfo['result']['b_borrow_amount'], // 订单金额
                'pay_no' => $orderNo, // 支付订单号
                'pay_channel' => '4', // 付款渠道(0线下，1融宝，2宝付，3连连 4寺库)
                'status' => '0', // 支付状态(0处理中 1支付成功 2支付失败)
                'b_id' => $getApplyInfo['result']['p_id'], // 订单ID
                't_bank_name' => $selectBank['result'][0]['ub_bank_name'], // 银行名称
                't_bank_card_code' => $selectBank['result'][0]['ub_card_no'], // 银行卡号
            );
        $transaction = $this->getWS('credit', 'Trace@transaction', $transaction);
        // if($transaction['status'] != '2000'){
        //     return $this->parse_data(['code' => 5000, 'msg' => '添加流水记录失败']);
        // }
        
        return $this->parse_data(['data'=>$result['result']]);
    }

    /**
     * 信用卡支付消费验证接口
     */
    public function consumerTransactionVerification($params=array())
    {
        // 测试参数
        // $params = array(
        //         'b_id' => '', // 订单ID *
        //         'user_bank_id' => '', // 银行卡号ID
        //         'phone_code' => '', // 支付验证码
        //     );

        // 校验参数
        $params['order_id'] = !empty($params['b_id']) ? $params['b_id'] : session('b_id');
        if(empty($params['order_id']) || empty($params['user_bank_id']) || empty($params['phone_code'])){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }

         // 获取订单数据
        $getApplyInfo = $this->getWS('credit', 'Apply@getApplyInfo', ['b_id'=>$params['order_id']]);
        if($getApplyInfo['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'订单信息获取失败']);
        }

        // 请求信用卡支付消费验证接口
        $data = array(
                'payId' => $getApplyInfo['result']['b_pay_id'], // 支付流水（消费接口返回数据中payId字段的值） *
                'orderId' => $getApplyInfo['result']['fund_loan_no'], // 订单ID *
                'orderAmount' => $getApplyInfo['result']['b_borrow_amount'], // 订单金额 *
                'payAmount' => $getApplyInfo['result']['b_borrow_amount'], // 实际支付金额 *
                'smsVerifyCode' => $params['phone_code'], // 短信验证码 * 
                'callbackURL' => 'http://test.channel.mayi121.com/callbackResult', // 异步通知地址
            );
        $this->publicParams('2002', $data);
        $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
        if($result['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'获取信息失败']);
        }

        // 查询订单是否支付成功
        $data1 = array(
                'orderId' => $getApplyInfo['result']['fund_loan_no'], // 订单ID *
            );
        $this->publicParams('4001', $data1);
        $resultPay = $this->getWS('channel', 'Secoo@index', $this->publicParams);
        if($resultPay['status'] != '2000' || $resultPay['result']['status'] != '200'){
            return $this->parse_data(['code'=>'5000','msg'=>'支付失败']);
        }

        // 更新订单状态 3000支付成功
        // $updateApply = $this->getWS('credit', 'Apply@updateApply', ['b_id'=>$params['order_id'], 'data'=>['b_status'=>'3000','b_pass_time'=>date('Y-m-d H:i:s')]]);
        // if($updateApply['status'] != '2000'){
        //     return $this->parse_data(['code' => 5000, 'msg' => '更新订单失败']);
        // }
        
        return $this->parse_data(['data' => $result['result']]);
    }

    /**
     * 信用卡查询
     */
    public function selectBank()
    {
        // 信用卡查询
        $result = $this->getWS('ucenter', 'bank@selectBank', ['u_code'=>$this->uid,'ub_status'=>1]);
        if($result['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'还没有绑定信用卡，快去绑卡吧']);
        }

        return $this->parse_data(['data'=>$result['result']]);
    }

    /**
     * 获取用户信息
     */
    public function getUserInfo()
    {
        // 查询用户信息
        $userInfo = $this->getWS('ucenter', 'users@userInfo', ['u_code'=>$this->uid]);
        if($userInfo['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'获取用户信息失败']);
        }

        return $this->parse_data(['data'=>$userInfo['result']]);
    }

    /** 
     * 获取支付详细
     */
    public function getApplyPayInfo($params=array())
    {
        // 测试参数
        // $params = array(
        //         'b_id' => '1334', // 订单ID *
        //     );

        // 校验参数
        $params['order_id'] = !empty($params['b_id']) ? $params['b_id'] : session('b_id');
        if(empty($params['order_id'])){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }

        // 获取订单数据
        $getApplyPayInfo = $this->getWS('credit', 'Apply@getApplyPayInfo', ['b_id'=>$params['order_id']]);
        if($getApplyPayInfo['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'系统内部错误']);
        }

        return $this->parse_data(['data'=>$getApplyPayInfo['result']]);
    }

    /**
     * 用户费率查询
     */
    private function userRate($params=array())
    {
        // 参数校验
        if(empty($params['term']) || empty($params['amount'])){
            return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
        }

        // 请求支持的信用卡列表
        $data = array(
                'amount' => $params['amount'], // 金额
                'stageNum' => $params['term'], // 账期数
            );
        $this->publicParams('4007',$data);
        $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
        if($result['status'] != '2000'){
            return $this->parse_data(['code'=>'5000','msg'=>'获取信息失败']);
        }

        // 计算服务费
        $rate = $result['result']['rates'][0]['rate'];
        $chargeAmount = $params['amount'] * $rate/100 * $params['term'];

        return $chargeAmount;
    }

    /**
     * 信用卡绑卡支付一体化接口
     * add zenghu 2018年11月28日
     */
    // public function consumptionBindCard($params=array())
    // {
    //     // 参数判断
    //     $params['order_id'] = !empty($params['b_id']) ? $params['b_id'] : session('b_id');
    //     if(!checkParam($params)){
    //         return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
    //     }

    //     // 获取订单数据
    //     $getApplyInfo = $this->getWS('credit', 'Apply@getApplyInfo', ['b_id'=>$params['order_id']]);
    //     if($getApplyInfo['status'] != '2000'){
    //         return $this->parse_data(['code'=>'5000','msg'=>'订单信息获取失败']);
    //     }
    //     // 查询用户信息
    //     $userInfo = $this->getWS('ucenter', 'users@userInfo', ['u_code'=>$this->uid]);
    //     if($userInfo['status'] != '2000'){
    //         return $this->parse_data(['code'=>'5000','msg'=>'系统内部错误']);
    //     }

    //     // 拼接信用卡支付参数
    //     $data = array();
    //     $data = array(
    //             'userName' => $userInfo['result']['u_true_name'], // 用户姓名 *
    //             'idCardNo' => $userInfo['result']['u_ident_no'], // 用户身份证号 *
    //             'bankTel' => $params['bankTel'], // 银行预留手机号 *
    //             'bankCode' => $params['bankCode'], // 银行编码 * 
    //             'bankNo' => $params['bankNo'], // 银行信用卡号 * 
    //             'bankExpireDate' => $params['bankExpireDate'], // 有效期 * 
    //             'bankCvn2' => $params['bankCvn2'], // 银行卡cv2 *
    //             'orderId' => 'MYP'.$getApplyInfo['result']['p_id'].$getApplyInfo['result']['u_code'].'B'.$getApplyInfo['result']['b_id'], // 订单ID *
    //             'orderAmount' => $getApplyInfo['result']['b_borrow_amount'], // 订单金额 *
    //             'payAmount' => $getApplyInfo['result']['b_borrow_amount'], // 实际支付金额 *
    //             'chargeAmount' => 0, // 用户服务费
    //             'stageNum' => $getApplyInfo['result']['b_period'], // 账期数（1/3/6/12/24） *
    //             'productInfo' => !empty($params['p_name']) ? $params['p_name'] : '教育课程账期', // 商品信息 *
    //         );

    //     // 参数赋值
    //     $this->publicParams('6001', $data);
    //     $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
    //     if($result['status'] != '2000'){
    //         return $this->parse_data(['code'=>'5000','msg'=>'获取信息失败']);
    //     }

    //     // 成功后绑定信用卡
    //     $addBankInfo = array(
    //                 'u_code' => $this->uid, // 学员编号
    //                 'ub_bank_name' => $params['cardName'], // 银行名称
    //                 'ub_card_no' => $params['bankNo'], // 银行卡号
    //                 'ub_phone' => $params['bankTel'], // 银行卡绑定手机号
    //                 'ub_bank_code' => $params['bankCode'], // 银行编码 
    //                 'ub_bank_expire_date' => $params['bankExpireDate'], // 有效期
    //                 'ub_bank_cvn2' => $params['bankCvn2'], // 银行卡cv2
    //                 'ub_status' => 1, // 是否可用（1启用，2解绑）
    //                 'ub_apply_id' => $result['result']['applyId'] // 寺库绑卡ID
    //             );
    //     $addBank = $this->getWS('ucenter', 'bank@addBank', $addBankInfo);
    //     // if($addBank['status'] != '2000'){
    //     //     return $this->parse_data(['code'=>'5000','msg'=>'信用卡添加失败']);
    //     // }
    //     $result['result']['ub_id'] = $addBank['result']['ub_id'];

    //     // 更新订单状态 信用卡支付流水 2201待支付
    //     $updateApply = $this->getWS('credit', 'Apply@updateApply', ['b_id'=>$params['order_id'], 'data' =>['b_pay_id'=>$result['result']['payId'],'b_status'=>'2201']]);
    //     // if($updateApply['status'] != '2000'){
    //     //     return $this->parse_data(['code' => 5000, 'msg' => '更新订单失败']);
    //     // }
        
    //     return $this->parse_data(['data' => $result['result']]);
    // }

    /**
     * 信用卡绑卡支付一体化验证接口
     * add zenghu 2018年11月28日
     */
    // public function consumptionBindCardVerification($params=array())
    // {
    //     // 校验参数
    //     $params['order_id'] = !empty($params['b_id']) ? $params['b_id'] : session('b_id');
    //     if(empty($params['order_id']) || empty($params['user_bank_id']) || empty($params['phone_code'])){
    //         return $this->parse_data(['code'=>'5000','msg'=>'参数错误']);
    //     }
        
    //     // 获取订单数据
    //     $getApplyInfo = $this->getWS('credit', 'Apply@getApplyInfo', ['b_id'=>$params['order_id']]);
    //     if($getApplyInfo['status'] != '2000'){
    //         return $this->parse_data(['code'=>'5000','msg'=>'系统内部错误']);
    //     }
    //     // 查询信用卡信息
    //     $selectBank = $this->getWS('ucenter','bank@selectBank',['u_code'=>$this->uid,'user_bank_id'=>$params['user_bank_id']]);
    //     if($selectBank['status'] != '2000'){
    //         return $this->parse_data(['code'=>'5000','msg'=>'系统内部错误']);
    //     }
    //     $data = array(
    //                 'orderId' => 'MYP'.$getApplyInfo['result']['p_id'].$getApplyInfo['result']['u_code'].'B'.$getApplyInfo['result']['b_id'], // 订单ID *
    //                 'payId' => $getApplyInfo['result']['p_pay_id'], // 支付流水（消费接口返回数据中payId字段的值） *
    //                 'applyId' => $selectBank['result'][0]['ub_apply_id'], // 申请ID（消费绑卡一体化发送短信返回值中的applyId字段） *
    //                 'orderAmount' => $getApplyInfo['result']['b_borrow_amount'], // 订单金额 *
    //                 'payAmount' => $getApplyInfo['result']['b_borrow_amount'], // 实际支付金额 *
    //                 'smsVerifyCode' => $params['phone_code'], // 短信验证码 * 
    //                 'callbackURL' => 'http://test.channel.mayi121.com/callbackResult', // 异步通知地址
    //             );
    //     // 参数赋值
    //     $this->publicParams('6002',$data);
    //     $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
    //     if($result['status'] != '2000'){
    //         return $this->parse_data(['code'=>'5000','msg'=>'获取信息失败']);
    //     }
        
    //     return $this->parse_data(['data' => $result['result']]);
    // }

    /**
     * 信用卡账单课程账期列表
     */
    // public function productBill()
    // {
    //     // 参数赋值
    //     $this->publicParams('4007',['amount'=>'10000']);
    //     $result = $this->getWS('channel', 'Secoo@index', $this->publicParams);
    //     if($result['status'] != '2000'){
    //         return $this->parse_data(['code'=>'5000','msg'=>'获取信息失败']);
    //     }
    //     return $this->parse_data(['data' => $result['result']]);
    // }

}
